package com.monster.starter.mybatis.plus.wapper.query;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.base.CaseFormat;
import com.monster.common.LambdaFunction;
import com.monster.utils.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 重新mybatis plus 的某些方法
 * @author kuang
 */
public class MonsterQueryWrapper<T> extends LambdaQueryWrapper<T> {
    /**
     * 通过lambda解析属性名，排除查询
     * 用这个方法的实体必须遵循实体的命名规范
     * @param clz 查询的实体
     * @param functions lambda方法,需要排除的查询字段
     * @return QueryWrapper
     */
    public LambdaQueryWrapper<T> notSelect(Class<T> clz, LambdaFunction<T>... functions) {
        List<String> names = new ArrayList<>(functions.length);
        for (LambdaFunction<T> function:functions) {
            names.add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, BeanUtils.getLambdaFieldName(function)));
        }
        return super.select(clz, info -> !names.contains(info.getColumn()));
    }
}
